package com.master.bd;

import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.Iterator;

import com.master.ed.Produto_PropostaED;
import com.master.ed.PropostaED;
import com.master.ed.Rota_Produto_PropostaED;
import com.master.util.Excecoes;
import com.master.util.FormataData;
import com.master.util.Mensagens;
import com.master.util.bd.ExecutaSQL;
import com.master.util.Utilitaria;

public class Produto_PropostaBD {

	public Produto_PropostaBD() {

	}

	private ExecutaSQL executasql;

	Utilitaria util = new Utilitaria(executasql);

	public Produto_PropostaBD(ExecutaSQL sql) {
		this.executasql = sql;
		util = new Utilitaria(this.executasql);
	}

	public Produto_PropostaED inclui(Produto_PropostaED ed) throws Excecoes {

		String sql = null;
		try {

			ed.setOid_produto_proposta(util.getAutoIncremento("oid_produto_proposta", "produtos_propostas"));

			sql = " INSERT INTO Produtos_Propostas (" + "OID_Produto_Proposta" + ", oid_produto" + ", oid_proposta"
					+ ", tx_acondicionamento, nr_geracao_mensal, nr_viagens, tx_descricao_logistica, tx_veiculos"
					+ ", tx_equipamentos, tx_capacidade_carga, tx_unidade_calculo, tx_observacao"
					+ ", vl_locacao1, vl_locacao2, vl_locacao3, vl_locacao4"
					+ ", dm_calculo1, dm_calculo2, dm_calculo3, dm_calculo4"
					+ ", nr_franquia1, nr_franquia2, nr_franquia3, nr_franquia4"
					+ ", vl_adicional1, vl_adicional2, vl_adicional3, vl_adicional4, vl_mercadoria, vl_total_frete"
					+ ") VALUES (" + ed.getOid_produto_proposta()
					+ ", " + ed.getOid_produto() + ", "
					+ ed.getOid_proposta() + ", "
					+ util.getSQLString(ed.getTx_acondicionamento()) + ", "
					+ ed.getNr_geracao_mensal() + ", "
					+ ed.getNr_viagens() + ", "
					+ util.getSQLString(ed.getTx_descricao_logistica()) + ", "
					+ util.getSQLString(ed.getTx_veiculos()) + ", "
					+ util.getSQLString(ed.getTx_equipamentos()) + ", "
					+ util.getSQLString(ed.getTx_capacidade_carga()) + ", "
					+ util.getSQLString(ed.getTx_unidade_calculo()) + ", "
					+ util.getSQLString(ed.getTx_observacao()) + ", "
					+ ed.getVl_locacao1() + ", " + ed.getVl_locacao2() + ", " + ed.getVl_locacao3() + ", " + ed.getVl_locacao4() + ", "
					+ util.getSQLString(ed.getDm_calculo1()) + ", " + util.getSQLString(ed.getDm_calculo2()) + ", " + util.getSQLString(ed.getDm_calculo3()) + ", " + util.getSQLString(ed.getDm_calculo4()) + ", "
					+ ed.getNr_franquia1() + ", " + ed.getNr_franquia2() + ", " + ed.getNr_franquia3() + ", " + ed.getNr_franquia4() + ", "
					+ ed.getVl_adicional1() + ", " + ed.getVl_adicional2() + ", " + ed.getVl_adicional3() + ", " + ed.getVl_adicional4() + " "
					+ ", " + ed.getVl_mercadoria() + " "
					+ ", " + ed.getVl_total_frete() + " "
					+ ")";

			executasql.executarUpdate(sql);
			return ed;
		} catch (Mensagens exc) {
			throw exc;
		} catch (Exception exc) {
			throw new Excecoes(exc.getMessage(), exc,
					this.getClass().getName(), "inclui()");
		}
	}

	public void altera(Produto_PropostaED ed) throws Excecoes {

		String sql = null;
		try {

			sql = " UPDATE Produtos_Propostas SET ";
			sql+= "oid_produto="+ ed.getOid_produto();
			sql+= ",tx_acondicionamento="+ util.getSQLString(ed.getTx_acondicionamento());
			sql+= ",nr_geracao_mensal="+ed.getNr_geracao_mensal();
			sql+= ",nr_viagens="+ed.getNr_viagens();
			sql+= ",tx_descricao_logistica="+ util.getSQLString(ed.getTx_descricao_logistica());
			sql+= ",tx_veiculos="+ util.getSQLString(ed.getTx_veiculos());
			sql+= ",tx_equipamentos="+ util.getSQLString(ed.getTx_equipamentos());
			sql+= ",tx_capacidade_carga="+ util.getSQLString(ed.getTx_capacidade_carga());
			sql+= ",tx_unidade_calculo="+ util.getSQLString(ed.getTx_unidade_calculo());
			sql+= ",tx_observacao="+ util.getSQLString(ed.getTx_observacao());
			sql+= ",vl_locacao1="+ed.getVl_locacao1();
			sql+= ",vl_locacao2="+ed.getVl_locacao2();
			sql+= ",vl_locacao3="+ed.getVl_locacao3();
			sql+= ",vl_locacao4="+ed.getVl_locacao4();
			sql+= ",dm_calculo1="+ util.getSQLString(ed.getDm_calculo1());
			sql+= ",dm_calculo2="+ util.getSQLString(ed.getDm_calculo2());
			sql+= ",dm_calculo3="+ util.getSQLString(ed.getDm_calculo3());
			sql+= ",dm_calculo4="+ util.getSQLString(ed.getDm_calculo4());
			sql+= ",nr_franquia1="+ed.getNr_franquia1();
			sql+= ",nr_franquia2="+ed.getNr_franquia2();
			sql+= ",nr_franquia3="+ed.getNr_franquia3();
			sql+= ",nr_franquia4="+ed.getNr_franquia4();
			sql+= ",vl_adicional1="+ed.getVl_adicional1();
			sql+= ",vl_adicional2="+ed.getVl_adicional2();
			sql+= ",vl_adicional3="+ed.getVl_adicional3();
			sql+= ",vl_adicional4="+ed.getVl_adicional4();
			sql+= ",vl_mercadoria="+ed.getVl_mercadoria();
			sql+= ",vl_total_frete="+ed.getVl_total_frete();

			sql += " WHERE oid_produto_proposta = " + ed.getOid_produto_proposta();

			executasql.executarUpdate(sql);
		} catch (Exception exc) {
			throw new Excecoes(exc.getMessage(), exc,
					this.getClass().getName(), "altera()");
		}
	}

	public void deleta(Produto_PropostaED ed) throws Excecoes {

		String sql = null;
		try {

			sql = " DELETE FROM Produtos_Propostas WHERE oid_produto_proposta = ";
			sql += ed.getOid_produto_proposta();

			executasql.executarUpdate(sql);

		} catch (Exception exc) {
			throw new Excecoes(exc.getMessage(), exc,
					this.getClass().getName(), "deleta()");
		}
	}

	public ArrayList lista(Produto_PropostaED ed) throws Excecoes {

		String sql = null;
		ArrayList list = new ArrayList();
		boolean consulta_lista = true;
		try {
			sql = " SELECT pp.*, prod.cd_produto, prod.nm_produto, p.nr_proposta, u.cd_unidade, pu.nm_razao_social as nm_unidade, " +
					" cli.nr_cnpj_cpf, cli.nm_razao_social, p.oid_unidade, p.oid_cliente, p.dt_emissao " +
					" FROM Propostas p " +
							"left join unidades u on p.oid_unidade = u.oid_unidade " +
							"      left join pessoas pu on u.oid_pessoa = pu.oid_pessoa " +
							" left join pessoas cli on p.oid_cliente = cli.oid_pessoa " +
					", Produtos_Propostas pp " +
							" left join produtos prod on pp.oid_produto = prod.oid_produto "
					+ " WHERE p.oid_proposta = pp.oid_proposta ";
			if (ed.getOid_proposta() > 0) {
				sql += " and p.oid_proposta = " + ed.getOid_proposta();
			}
			if (ed.getOid_produto_proposta() > 0) {
				sql += " and pp.oid_produto_proposta = " + ed.getOid_produto_proposta();
			}

			sql += " ORDER BY p.oid_proposta, pp.oid_Produto_Proposta";

//			// (sql);

			ResultSet res = this.executasql.executarConsulta(sql);
			ResultSet res2 = null;
			String NR_Processo = "";
			while (res.next()) {
				Produto_PropostaED edVolta = new Produto_PropostaED();

				edVolta.setOid_produto_proposta(res.getLong("oid_Produto_Proposta"));
				edVolta.setOid_proposta(res.getLong("oid_Proposta"));
				edVolta.setNr_proposta(res.getLong("nr_proposta"));

				edVolta.setOid_unidade(res.getString("oid_unidade"));
				edVolta.setCd_unidade(res.getString("cd_unidade"));
				edVolta.setNm_unidade(res.getString("nm_unidade"));
				edVolta.setOid_cliente(res.getString("oid_cliente"));
				edVolta.setNm_razao_social(res.getString("nm_razao_social"));
				edVolta.setNr_cnpj_cpf(res.getString("nr_cnpj_cpf"));
				edVolta.setDt_emissao(FormataData.formataDataBT(res.getString("dt_emissao")));

				edVolta.setOid_produto(res.getInt("oid_produto"));
				edVolta.setCd_produto(res.getString("cd_produto"));
				edVolta.setNm_produto(res.getString("nm_produto"));

				edVolta.setNr_geracao_mensal(res.getDouble("nr_geracao_mensal"));
				edVolta.setNr_viagens(res.getDouble("nr_viagens"));

				edVolta.setTx_acondicionamento(util.getValueDef(res.getString("tx_acondicionamento"),""));
				edVolta.setTx_descricao_logistica(util.getValueDef(res.getString("tx_descricao_logistica"),""));
				edVolta.setTx_veiculos(util.getValueDef(res.getString("tx_veiculos"),""));
				edVolta.setTx_equipamentos(util.getValueDef(res.getString("tx_equipamentos"),""));
				edVolta.setTx_capacidade_carga(util.getValueDef(res.getString("tx_capacidade_carga"),""));
				edVolta.setTx_unidade_calculo(util.getValueDef(res.getString("tx_unidade_calculo"),""));
				edVolta.setTx_observacao(util.getValueDef(res.getString("tx_observacao"),""));

				edVolta.setRotas(new Rota_Produto_PropostaBD(this.executasql).lista(new Rota_Produto_PropostaED(edVolta.getOid_produto_proposta())));

				edVolta.setVl_mercadoria(res.getDouble("vl_mercadoria"));
				edVolta.setVl_total_frete(res.getDouble("vl_total_frete"));
				edVolta.setVl_locacao1(res.getDouble("vl_locacao1"));
				edVolta.setVl_locacao2(res.getDouble("vl_locacao2"));
				edVolta.setVl_locacao3(res.getDouble("vl_locacao3"));
				edVolta.setVl_locacao4(res.getDouble("vl_locacao4"));
				edVolta.setDm_calculo1(util.getValueDef(res.getString("dm_calculo1"),""));
				edVolta.setDm_calculo2(util.getValueDef(res.getString("dm_calculo2"),""));
				edVolta.setDm_calculo3(util.getValueDef(res.getString("dm_calculo3"),""));
				edVolta.setDm_calculo4(util.getValueDef(res.getString("dm_calculo4"),""));
				edVolta.setNr_franquia1(res.getDouble("nr_franquia1"));
				edVolta.setNr_franquia2(res.getDouble("nr_franquia2"));
				edVolta.setNr_franquia3(res.getDouble("nr_franquia3"));
				edVolta.setNr_franquia4(res.getDouble("nr_franquia4"));
				edVolta.setVl_adicional1(res.getDouble("vl_adicional1"));
				edVolta.setVl_adicional2(res.getDouble("vl_adicional2"));
				edVolta.setVl_adicional3(res.getDouble("vl_adicional3"));
				edVolta.setVl_adicional4(res.getDouble("vl_adicional4"));

				list.add(edVolta);

			}
			return list;
		} catch (Exception exc) {
//			exc.printStackTrace();
			throw new Excecoes(exc.getMessage(), exc,
					this.getClass().getName(), "lista()");
		}

	}

	public Produto_PropostaED getByRecord(Produto_PropostaED ed) throws Excecoes {

		try {
			Iterator it = this.lista(ed).iterator();
			if (it.hasNext())
				return (Produto_PropostaED) it.next();
			else
				return new Produto_PropostaED();
		} catch (Exception exc) {
			throw new Excecoes(exc.getMessage(), exc,
					this.getClass().getName(), "getByRecord()");
		}
	}

	public ArrayList listaOperacional(PropostaED ed) throws Excecoes {

		String sql = null;
		ArrayList list = new ArrayList();
		boolean consulta_lista = true;
		try {
			sql = " SELECT pp.*, prod.cd_produto, prod.nm_produto, p.nr_proposta, u.cd_unidade, pu.nm_razao_social as nm_unidade, " +
					" cli.nr_cnpj_cpf, cli.nm_razao_social, p.oid_unidade, p.oid_cliente, p.dt_emissao " +
					" FROM Propostas p " +
							"left join unidades u on p.oid_unidade = u.oid_unidade " +
							"      left join pessoas pu on u.oid_pessoa = pu.oid_pessoa " +
							" left join pessoas cli on p.oid_cliente = cli.oid_pessoa " +
					", Produtos_Propostas pp " +
							" left join produtos prod on pp.oid_produto = prod.oid_produto "
					+ " WHERE p.oid_proposta = pp.oid_proposta ";
			if (ed.getNr_proposta() > 0) {
				sql += " and p.nr_proposta = " + ed.getNr_proposta();
			}
			if (util.doValida(ed.getOid_unidade())) {
				sql += " and p.oid_unidade = " + ed.getOid_unidade();
			}
			if (util.doValida(ed.getOid_cliente())) {
				sql += " and p.oid_cliente = '" + ed.getOid_cliente() + "'";
			}
			if (util.doValida(ed.getDt_emissao())) {
				sql += " and p.dt_emissao >= '" + ed.getDt_emissao() + "'";
			}
			if (util.doValida(ed.getDt_emissao_final())) {
				sql += " and p.dt_emissao <= '" + ed.getDt_emissao_final() + "'";
			}
			if (util.doValida(ed.getDt_validade())) {
				sql += " and p.dt_validade >= '" + ed.getDt_validade() + "'";
			}
			if (util.doValida(ed.getDt_validade_final())) {
				sql += " and p.dt_validade <= '" + ed.getDt_validade_final() + "'";
			}

			sql += " ORDER BY p.oid_proposta, pp.oid_Produto_Proposta";

			// (sql);

			ResultSet res = this.executasql.executarConsulta(sql);
			ResultSet res2 = null;
			String NR_Processo = "";
			while (res.next()) {
				PropostaED edVolta = new PropostaED();

				edVolta.setOid_proposta(res.getLong("oid_Proposta"));
				edVolta.setNr_proposta(res.getLong("nr_proposta"));

				edVolta.setOid_unidade(res.getString("oid_unidade"));
				edVolta.setCd_unidade(res.getString("cd_unidade"));
				edVolta.setNm_unidade(res.getString("nm_unidade"));
				edVolta.setOid_cliente(res.getString("oid_cliente"));
				edVolta.setNm_razao_social(res.getString("nm_razao_social"));
				edVolta.setNr_cnpj_cpf(res.getString("nr_cnpj_cpf"));
				edVolta.setDt_emissao(FormataData.formataDataBT(res.getString("dt_emissao")));

				edVolta.setOid_produto(res.getInt("oid_produto"));
				edVolta.setCd_produto(res.getString("cd_produto"));
				edVolta.setNm_produto(res.getString("nm_produto"));

				list.add(edVolta);

			}
			return list;
		} catch (Exception exc) {
//			exc.printStackTrace();
			throw new Excecoes(exc.getMessage(), exc,
					this.getClass().getName(), "lista()");
		}

	}

}
